package org.example.config;

import lombok.extern.slf4j.Slf4j;
import org.example.exception.AppException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;


//SpringMVC请求映射方法统一增强
@Slf4j
@ControllerAdvice
public class AppExceptionAdvice {


    @ExceptionHandler(AppException.class)
    public Object handleAppException(AppException e){
        log.debug("出现异常啦",e);
        Map<String,Object> json = new HashMap<>();
        json.put("ok",false);
        json.put("error",e.getMessage());
        return json;
    }

    //添加统一异常处理：方法定义和Controller方法定义类似
    //方法参数用于绑定我们的请求数据(还可以绑定捕获的异常)，方法返回值用于返回响应
    //如返回页面，就是不加@ResponseBody,返回String
    //如返回json，就是加@ResponseBody，返回我们的对象
    @ExceptionHandler({Exception.class})
    @ResponseBody
    public Object handle(Exception e){//这里我们做一个统一的方法增强
        log.error("出现异常啦",e);
        Map<String,Object> json = new HashMap<>();
        json.put("ok",false);
        //异常信息一般分为两种：
        //1.用户可以看到的错误提示：比如登录时候出错
        //2.程序的BUG导致的异常，比如我们这里的1/0
        if(e instanceof AppException){
            json.put("error",e.getMessage());
        }else{
            json.put("error","系统出错，请联系管理员");
        }
        return json;
    }
}
